package py.cursoweb.controller;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import py.cursoweb.model.Cliente;
import py.cursoweb.controller.HibernateUtil;

public class ClienteManager {

	//Datos de prueba .... aun no conecta a base de datos
	private static ArrayList<Cliente> clientes = null;
	
	public ClienteManager() {
		if (clientes == null) {
			clientes = new ArrayList<Cliente>();
		}
	}
	
	public List<Cliente> getClientes() throws Exception {
		Session session = getSession();
		Transaction trans = session.beginTransaction();
		List<Cliente> clientes;
		
		try {			
			clientes = session.createQuery("from Cliente").list();
			trans.commit(); 
		}catch(Exception ex) {
			ex.printStackTrace();
			trans.rollback();
			
			throw ex;
		}			 
		
		return clientes;
	}
	
	public void addCliente(Cliente cliente) {
		clientes.add(cliente);
	}
	
	public Cliente getCliente(Integer id) {
		try {
			clientes = (ArrayList<Cliente>) this.getClientes();
			for(Cliente cliente : clientes) {
				if (cliente.getId().equals(id))
					return cliente;
			}
		} catch (Exception e) {
			return null;
		}							
		
		return null;
	}
	
	
	//acceso a base de datos
	public void saveCliente(Cliente cliente) throws Exception {
		Session session = getSession();
		Transaction trans = session.beginTransaction();
		
		try {			
			session.saveOrUpdate(cliente);
			trans.commit();
		}catch(Exception ex) {
			ex.printStackTrace();
			trans.rollback();
			
			throw ex;
		}			
	}
	
	public void deleteCliente(Cliente cliente) throws Exception {
		Session session = getSession();
		Transaction trans = session.beginTransaction();
		
		try {			
			session.delete(cliente);
			trans.commit();
		}catch(Exception ex) {
			ex.printStackTrace();
			trans.rollback();
			
			throw ex;
		}			
	}
	
	public Session getSession() {
		return HibernateUtil.getSessionFactory().getCurrentSession();
	}

}
